package com.lpx.blog.res;

import com.lpx.blog.enums.ResultStatusEnum;
import lombok.Data;

@Data
public class Result<T> {
	private Integer code;
	private String message;
	private T data;

	public Result(ResultStatusEnum resultStatusEnum, T data) {
		this.code = resultStatusEnum.getValue();
		this.message = resultStatusEnum.getDesc();
		this.data = data;
	}

	/**
	 * 业务成功返回业务代码和描述信息
	 */
	public static <Void> Result<Void> success() {
		return new Result<Void>(ResultStatusEnum.SUCCESS, null);
	}

	/**
	 * 业务成功返回业务代码,描述和返回的参数
	 */
	public static <T> Result<T> success(T data) {
		return new Result<T>(ResultStatusEnum.SUCCESS, data);
	}

	/**
	 * 业务成功返回业务代码,描述和返回的参数
	 */
	public static <T> Result<T> success(ResultStatusEnum resultStatus, T data) {
		if (resultStatus == null) {
			return success(data);
		}
		return new Result<T>(resultStatus, data);
	}

	/**
	 * 业务异常返回业务代码和描述信息
	 */
	public static <T> Result<T> failure() {
		return new Result<T>(ResultStatusEnum.PARAM_TYPE_BIND_ERROR, null);
	}

	/**
	 * 业务异常返回业务代码,描述和返回的参数
	 */
	public static <T> Result<T> failure(ResultStatusEnum resultStatus) {
		return failure(resultStatus, null);
	}

	/**
	 * 业务异常返回业务代码,描述和返回的参数
	 */
	public static <T> Result<T> failure(ResultStatusEnum resultStatus, T data) {
		if (resultStatus == null) {
			return new Result<T>(ResultStatusEnum.PARAM_IS_INVALID, null);
		}
		return new Result<T>(resultStatus, data);
	}
}